home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / AlexNeXTSTEPSource / Source / Chapter9_Text / Scroll / Scroll.m < prev   
Text File  |  1995-06-12  |  3KB  |  110 lines

  1. #import <appkit/appkit.h>
  2.  
  3. // minimal program to demonstrate
  4. // a text object and scrolling
  5.  
  6. main()
  7. {
  8.     id NXApp = [Application new];
  9.     id theWindow;
  10.     id theMenu;
  11.     id theText; 
  12.     id theScrollView;
  13.     NXRect theRect;
  14.     NXSize theSize;
  15.     id otherWindow, otherText;
  16.     NXSize otherSize;
  17.  
  18.     // create the window
  19.     NXSetRect(&theRect, 200.0, 300.0, 350.0, 150.0);
  20.     theWindow = [ [Window alloc]
  21.         initContent:&theRect
  22.         style: NX_TITLEDSTYLE
  23.         backing:NX_BUFFERED
  24.         buttonMask:NX_MINIATURIZEBUTTONMASK
  25.         defer:YES];
  26.     [theWindow setBackgroundGray:NX_WHITE];
  27.  
  28.     // create a scrollview
  29.     NXSetRect(&theRect, 0.0, 0.0, 350.0, 150.0);
  30.     theScrollView = [ [ScrollView alloc]
  31.         initFrame:&theRect];
  32.     [theScrollView
  33.         setVertScrollerRequired:YES];
  34.     [theScrollView
  35.         setHorizScrollerRequired:NO];
  36.     [ [theWindow contentView]
  37.         addSubview :theScrollView];
  38.     
  39.     // get the size of the content view
  40.     [theScrollView getContentSize:&theSize];
  41.  
  42.     // create another text object
  43.     NXSetRect(&theRect, 0.0, 0.0,
  44.         theSize.width, theSize.height);
  45.     theText = [ [Text alloc] initFrame:&theRect
  46.         text:"Text in scrollview"
  47.         alignment:NX_LEFTALIGNED];
  48.     [theText setOpaque:YES];
  49.     // notify superview when frame
  50.     // rectangle changes -- allows scrollview
  51.     // to update the scrollers
  52.     [theText notifyAncestorWhenFrameChanged:YES];
  53.     [theText setVertResizable:YES];
  54.     [theText setHorizResizable:NO];
  55.     // select all the text
  56.  
  57.     // create min and max size of text
  58.     theSize.width = 0.0;
  59.     [theText setMinSize:&theSize];
  60.     theSize.height = 1000000;
  61.     [theText setMaxSize:&theSize];
  62.  
  63.     // set the text as docview of scrollview
  64.     [theScrollView setDocView:theText];
  65.  
  66.     // create other window
  67.     NXSetRect(&theRect, 100.0, 100.0, 350.0, 150.0);
  68.     otherWindow = [ [Window alloc]
  69.         initContent:&theRect
  70.         style: NX_TITLEDSTYLE
  71.         backing:NX_BUFFERED
  72.         buttonMask:NX_MINIATURIZEBUTTONMASK
  73.         defer:YES];
  74.     [theWindow setBackgroundGray:NX_WHITE];
  75.  
  76.     // create other text
  77.     NXSetRect(&theRect, 0.0, 0.0, 350.0, 150.0);
  78.     otherText = [ [Text alloc]
  79.         initFrame:&theRect
  80.         text:"Text without scrollview"
  81.         alignment:NX_LEFTALIGNED];
  82.     [otherText setOpaque:YES];
  83.     [ [otherWindow contentView]
  84.         addSubview:otherText];
  85.  
  86.     // create min and max size of text
  87.     otherSize.width = 0.0;
  88.     [otherText setMinSize:&otherSize];
  89.     otherSize.height = 1000000;
  90.     [theText setMaxSize:&otherSize];
  91.  
  92.     // create the menu
  93.     theMenu = [ [Menu alloc]
  94.         initTitle: [NXApp appName] ];
  95.     [theMenu addItem:"Quit"
  96.         action:@selector(terminate:)
  97.         keyEquivalent:'q'];
  98.     [theMenu sizeToFit];
  99.     [NXApp setMainMenu:theMenu];
  100.  
  101.     // display both windows
  102.     [theWindow makeKeyAndOrderFront:nil];
  103.     // set the selection in the text
  104.     [theText setSel:0 :0];
  105.     [otherWindow orderFront:nil];
  106.  
  107.     // Enter event loop
  108.     [NXApp run];
  109. }
  110.